/**
 * Created by songjuxi on 2017/3/30.
 */

const SELECT_GOODS_SEARCH_LOADING = Symbol('SELECT_GOODS_SEARCH_LOADING');
const SELECT_GOODS_SEARCH_FAIL = Symbol('SELECT_GOODS_SEARCH_FAIL');
const SELECT_GOODS_SEARCH_SUCCESS = Symbol('SELECT_GOODS_SEARCH_SUCCESS');

const SHOWMODAL = Symbol('SHOWMODAL');
const FORM_DATA = Symbol('FORM_DATA');

const LINKDATA = Symbol('LINKDATA');

export default function (state = { loading: false }, action = {}) {
  switch (action.type) {
    case SELECT_GOODS_SEARCH_LOADING:
      return {
        ...state,
        listLoading: true // 表格数据加载符
      };
    case SELECT_GOODS_SEARCH_SUCCESS:
      return {
        ...state,
        loading: false,
        loaded: true,
        data: action.result, // search from 和 翻页，以及弹窗内更新过数据后，都要重新更新表格数据（需用同一个数据源）
        listLoading: false
      };
    case SELECT_GOODS_SEARCH_FAIL:
      return {
        ...state,
        loading: false,
        loaded: false,
        error: action.msg,
        listLoading: false
      };
    case SHOWMODAL:
      return {
        ...state,
        visible: action.visible // table 操作控制弹窗展示，弹窗内的按钮进行关闭（需用同一个数据源）
      }
    case FORM_DATA:
      return {
        ...state,
        searchdata: action.searchdata // search form 表单数据，翻页时也需要使用（需用同一个数据源）
      }
    case LINKDATA:
      return {
        ...state,
        linkdata: action.linkdata // 表格操作当前行数据，从表格传递给弹窗（需用同一个数据源）
      };
    default:
      return state
  }
}

// 更新列表数据源（触发源：查询按钮，翻页，弹窗内更新数据后）
export function buyerBillSearch(values) {
  return {
    types: [SELECT_GOODS_SEARCH_LOADING, SELECT_GOODS_SEARCH_SUCCESS, SELECT_GOODS_SEARCH_FAIL],
    promise: ({ client }) => client.get('/order/platform/orderInvoice/queryPageList', { params: values })
  }
}

// 保存查询表单数据（触发源：search 查询按钮，翻页也需要）
export function saveFormData(values) {
  return {
    type: FORM_DATA,
    searchdata: values
  }
}
// 控制弹窗是否展示（触发源：表格操作和弹窗内按钮）
export function showModal(visible) {
  return {
    type: SHOWMODAL,
    visible: visible
  }
}

// 获取表格当前行数据，传递给弹窗（触发源：表格内操作按钮）
export function getLinkData(linkdata) {
  return {
    type: LINKDATA,
    linkdata: linkdata || {}
  }
}